home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 10
/
AACD 10.iso
/
AACD
/
Magazine
/
Payback
/
FirePower
/
FirePower.AMOS
/
FirePower.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1996-10-22
|
61KB
|
2,336 lines
Set Buffer 50
Trap Screen Close 0
Hide On
Track Loop On
Led Off
Track Play 3
Randomize Timer
Global DISK$
If Prg State=1
Dir$="idh1:My Stuff/FirePower/"
Else
Break Off
Amos To Front
Amos Lock
Request Off
End If
DISK$=Dir$
Erase 1
Global _MINI,_BOSTON18,_BOSTON23
_GETFONTS
Screen Open 1,320,256,2,Lowres
Screen Hide 1
Flash Off
Curs Off
Cls 0
Set Font _MINI
N$="Something wonderful happens..."
Text 160-(Text Length(N$)/2),126,N$
Palette $0,$0
Screen Show 1
Wait Vbl
Fade 2,$0,$3D3
Wait 30
Unpack 10 To 0
Screen Hide 0
N=0
For Y=1 To 256 Step 17
For X=1 To 222 Step 17
Inc N
Get Bob 0,N,X,Y To X+16,Y+16
Next
Next
Inc N
Get Bob 0,N,246,8 To 248,10
Hot Spot N,-7,-7
Inc N
Get Bob 0,N,263,8 To 265,10
Hot Spot N,-7,-7
Inc N
Get Bob 0,N,280,8 To 282,10
Hot Spot N,-7,-7
Inc N
Get Bob 0,N,290,1 To 306,17
Inc N
Get Bob 0,N,245,24 To 249,28
Hot Spot N,-6,-6
Inc N
Get Bob 0,N,262,24 To 266,28
Hot Spot N,-6,-6
Inc N
Get Bob 0,N,279,24 To 283,28
Hot Spot N,-6,-6
Inc N
Get Bob 0,N,290,18 To 306,34
For Y=35 To 256 Step 17
For X=239 To 290 Step 17
Inc N
Get Bob 0,N,X,Y To X+16,Y+16
Next
Next
Inc N
Get Bob 0,N,0,273 To 284,310
For X=286 To 303 Step 17
For Y=273 To 290 Step 17
Inc N
Get Bob 0,N,X,Y To X+16,Y+16
Next
Next
Unpack 11 To 0
Screen Hide 0
Inc N
Get Bob 0,N,22,29 To 35,42
Inc N
Get Bob 0,N,40,29 To 53,42
Cls 0
For C=1 To 7
Ink 8-C,0,0
Draw C-1,0 To 0,C-1
Next
Inc N
Get Sprite 0,N,0,0 To 7,7
Make Mask
Dim _CONTROL(2,1),_FIRED(2),_HIT(2),_SKILL(2)
Dim _XSPEED(55),_YSPEED(55)
Global _CONTROL(),_XSPEED(),_YSPEED(),_PTY,_FIRED(),_HIT(),_SKILL(),_TOTALT
' _CONTROL(): 0=computer, 1=joy left, 2=joy right, 3=joy adapt. left, 4=joy adapt. right, 5=key 1, 6=key 2
' Keys 1:
's,z,l-alt,l-amiga
' Keys 2:
'-,+,|,]
N=0
For T=0 To 2
For P=0 To 1
Inc N
_CONTROL(T,P)=N
Next
Next
Dim _PF(2),_PH(2)
Dim _SPECIAL_X(39),_SPECIAL_Y(39),_SPECIAL_XS(39),_SPECIAL_YS(39),_SPECIAL_F(39)
Dim _TANK_X(2),_TANK_Y(2),_TANK_VELOCITY(2),_TANK_DIRECTION(2),_TANK_SHIELD(2),_TANK_FUEL(2),_TANK_XS(2),_TANK_YS(2),_TANK_SPECIAL(2)
Dim _GUN_DIRECTION(2),_GUN_AMMO(2,1)
Dim _FLAG_MODE(2),_FLAG_X(2),_FLAG_Y(2)
Dim _MAP(39,31)
Dim _BASE_X(2),_BASE_Y(2)
Global _PF(),_PH(),_SPECIAL_X(),_SPECIAL_Y(),_SPECIAL_XS(),_SPECIAL_YS(),_SPECIAL_F()
Global _TANK_X(),_TANK_Y(),_TANK_VELOCITY(),_TANK_DIRECTION(),_TANK_SHIELD(),_TANK_FUEL(),_TANK_XS(),_TANK_YS(),_TANK_SPECIAL()
Global _GUN_DIRECTION(),_GUN_AMMO(),_FLAG_MODE(),_FLAG_X(),_FLAG_Y(),_MAP(),_BASE_X(),_BASE_Y()
Restore BASEDAT
For Z=0 To 2
Read _BASE_X(Z)
Read _BASE_Y(Z)
Next
Degree
For Z=0 To 55
D=((Z*360)/56)-90
_XSPEED(Z)=Cos(D)*16
_YSPEED(Z)=Sin(D)*16
Next
Screen 1
Fade 2
Wait 30
Screen Close 1
Do
' Title screen
_TITLESCREEN
Exit If Param
' Setup screen
_CONFIGSCREEN
' Main game
_MAINGAME[False]
WINNER=Param
Track Play 3
If WINNER<>-1
_RESULTS[WINNER]
End If
Loop
End
Procedure _MAINGAME[_DEMO]
' Open 'please wait' screen
_CREATEBACKGROUND
Screen 7
Colour 8,$FFF
Screen Open 4,320,256,32,Lowres
Screen Hide 4
Flash Off
Curs Off
Cls 0
For Z=0 To 8
Colour Z,$0
Next
Screen Copy 7 To 4
Gr Writing 0
Ink 8,0,0
Set Font _MINI
N$="Generating landscape..."
Text 160-(Text Length(N$)/2),130,N$
Gr Writing 1
Screen Show 4
Fade 1 To 7
Screen Close 7
' Setup variables
Dim _XS(2),_YS(2)
Dim _PD(2)
Dim _OX(2),_OY(2)
For Z=0 To 39
_SPECIAL_F(Z)=-100
Next
_TOTALT=1
For Z=0 To 2
_FIRED(Z)=0
_HIT(Z)=0
_SKILL(Z)=0
_TANK_SPECIAL(Z)=0
_TANK_X(Z)=_BASE_X(Z)*16*64
_TANK_Y(Z)=_BASE_Y(Z)*16*64
_TANK_XS(Z)=0
_TANK_YS(Z)=0
_TANK_VELOCITY(Z)=0
_TANK_DIRECTION(Z)=0
_TANK_SHIELD(Z)=35
_TANK_FUEL(Z)=50000
_GUN_DIRECTION(Z)=0
_GUN_AMMO(Z,0)=99
_GUN_AMMO(Z,1)=5
_FLAG_MODE(Z)=-1
_FLAG_X(Z)=_BASE_X(Z)*16
_FLAG_Y(Z)=_BASE_Y(Z)*16
Next
' _FLAG_MODE(): -1=at coords, 0=in tank 0, 1=in tank 1, 2=in tank 2
' Create map (not as easy as it looks!)
Screen Open 2,640,512,16,Lowres
Screen Hide 2
Flash Off
Curs Off
Get Sprite Palette
Led Off
For X=0 To 624 Step 16
For Y=0 To 496 Step 16
R=233+Rnd(3)
Paste Bob X,Y,R
_MAP(X/16,Y/16)=R
Next
Next
Led Off
For Z=1 To 200
X=(Rnd(37)+1)*16
Y=(Rnd(29)+1)*16
R=Rnd(8)
If R=0
T=228
End If
If R=1
T=232
End If
If R>1
T=268+R
End If
Paste Bob X,Y,T
_MAP(X/16,Y/16)=T
Next
For A=1 To 2
Led Off
X=Rnd(35)+2
Y=Rnd(27)+2
S=Rnd(50)+50
For Z=1 To S
R=Rnd(3)+248
Paste Bob X*16,Y*16,R
_MAP(X,Y)=R
R=Rnd(3)
If R=0
Inc X
End If
If R=1
Dec X
End If
If R=2
Inc Y
End If
If R=3
Dec Y
End If
If X>37
X=37
End If
If X<2
X=2
End If
If Y>29
Y=29
End If
If Y<2
Y=2
End If
Next
Next
AB=0
Repeat
Led Off
CHANGED=False
For X=1 To 38
For Y=1 To 30
_WATER[_MAP(X,Y)]
If Param=False
SR=0
_WATER[_MAP(X,Y-1)]
A=-1-Param
_WATER[_MAP(X+1,Y)]
B=-1-Param
_WATER[_MAP(X,Y+1)]
C=-1-Param
_WATER[_MAP(X-1,Y)]
D=-1-Param
_TEST[A,B,C,D]
If Param
N=248+Rnd(3)
_MAP(X,Y)=N
Paste Bob X*16,Y*16,N
CHANGED=True
End If
End If
Next
Next
Inc AB
If AB>10
CHANGED=False
End If
Until CHANGED=False
For X=1 To 38
Led Off
For Y=1 To 30
_WATER[_MAP(X,Y)]
If Param=False
_WATER[_MAP(X-1,Y-1)]
A=Param
_WATER[_MAP(X,Y-1)]
B=Param
_WATER[_MAP(X+1,Y-1)]
C=Param
_WATER[_MAP(X+1,Y)]
D=Param
_WATER[_MAP(X+1,Y+1)]
E=Param
_WATER[_MAP(X,Y+1)]
F=Param
_WATER[_MAP(X-1,Y+1)]
G=Param
_WATER[_MAP(X-1,Y)]
H=Param
_NUMBER[A,B,C,D,E,F,G,H]
If Param<>0
Paste Bob X*16,Y*16,Param
_MAP(X,Y)=Param
End If
End If
Next
Next
For Z=0 To 2
_MAP(_BASE_X(Z),_BASE_Y(Z))=Z+264
Paste Bob _BASE_X(Z)*16,_BASE_Y(Z)*16,Z+264
Next
For O=1 To 3
Repeat
X=Rnd(37)+1
Y=Rnd(29)+1
M=_MAP(X,Y)
If M<233 or M>247
OKAY=False
Else
OKAY=True
End If
Until OKAY
_MAP(X,Y)=239
D=Rnd(3)
Led Off
For Z=1 To 50
OD=D
Repeat
If D=0
XS=1
YS=0
End If
If D=1
XS=0
YS=1
End If
If D=2
XS=-1
YS=0
End If
If D=3
XS=0
YS=-1
End If
OKAY=True
If X+XS>39 or Y+YS>31 or X+XS<0 or Y+YS<0
OKAY=False
Else
M=_MAP(X+XS,Y+YS)
If M<233 or M>247
OKAY=False
End If
End If
If OKAY=False
Add D,1,0 To 3
End If
Until OKAY or OD=D
Add X,XS
Add Y,YS
_MAP(X,Y)=239
Next
Next
For X=0 To 39
Led Off
For Y=0 To 31
_CHECK[X,Y,0,0]
If Param=239
_CHECK[X,Y,1,0]
A=False
If Param=238 or Param=239 or Param=240 or Param=241 or Param=242 or Param=245 or Param=246 or Param=293
A=True
End If
_CHECK[X,Y,-1,0]
B=False
If Param=238 or Param=239 or Param=240 or Param=242 or Param=243 or Param=244 or Param=247 or Param=292
B=True
End If
_CHECK[X,Y,0,1]
C=False
If Param=237 or Param=239 or Param=241 or Param=242 or Param=243 or Param=246 or Param=247 or Param=290
C=True
End If
_CHECK[X,Y,0,-1]
D=False
If Param=237 or Param=239 or Param=240 or Param=241 or Param=243 or Param=244 or Param=245 or Param=291
D=True
End If
NM=_MAP(X,Y)
If A
NM=292
End If
If B
NM=293
End If
If C
NM=291
End If
If D
NM=290
End If
If A and B
NM=238
End If
If C and D
NM=237
End If
If A and D
NM=247
End If
If A and C
NM=244
End If
If C and B
NM=245
End If
If B and D
NM=246
End If
If A and B and D
NM=242
End If
If D and A and C
NM=243
End If
If A and B and C
NM=240
End If
If B and C and D
NM=241
End If
If A and B and C and D
NM=239
End If
Paste Bob X*16,Y*16,NM
_MAP(X,Y)=NM
End If
Next
Next
Unpack 11 To 7
Screen Hide 7
Led Off
Ink 0,0,0
Bar 22,29 To 35,42
Bar 40,29 To 53,42
Colour 8,$FF0
Screen Open 1,320,64,16,Lowres
Screen Hide 1
Curs Off
Flash Off
Screen Copy 7 To 1
For Z=0 To 15
Colour Z,$0
Next
Screen Display 1,128,244,320,64
Set Font _MINI
For Z=0 To 2
_UPDATESCORE[True,True,True,True,Z]
Next
If _DEMO=False
Track Stop
End If
Screen 4
Fade 1
Wait 15
Screen Close 4
Screen Show 1
Screen 1
Fade 1 To 7
Wait Vbl
Timer=0
Screen Close 7
Screen Open 0,320,200,16,Lowres
Screen Hide 0
Curs Off
Flash Off
Cls 0
For Z=0 To 15
Colour Z,$0
Next
Screen Display 0,128,42,320,200
Screen Show 0
Screen 0
Double Buffer
Autoback 0
Bob Update Off
_CURRSPECIAL=0
_WON=0
Wait Max(1,15-Timer)
Set Rainbow 0,8,32,"","",""
For Y=0 To 31
Rain(0,Y)=(256*15)+(((31-Y)/2)*16)
Next
Rainbow 0,0,272,32
If _DEMO=False
Volume %111,32
End If
Fade 1 To 2
Timer=0
DDD=14
LCT=Timer+250
LUD=Timer+50
Clear Key
Repeat
Screen 2
Bob Clear
If Timer>LCT
If DDD=14
DDD=-14
Else
DDD=14
End If
LCT=Timer+250
End If
If Timer>LUD
For Z=0 To 2
_UPDATESCORE[True,True,True,True,Z]
_INTANK=False
For A=0 To 2
If _FLAG_MODE(A)=Z
_INTANK=True
A=5
End If
Next
_ATBASE=False
For A=0 To 2
If _FLAG_MODE(A)<=-1 and _FLAG_X(A)=_BASE_X(Z)*16 and _FLAG_Y(A)=_BASE_Y(Z)*16
_ATBASE=True
A=5
End If
Next
If _ATBASE
Inc _SKILL(Z)
End If
If _INTANK
Inc _SKILL(Z)
End If
Next
LUD=Timer+50
Add _TOTALT,2
End If
_DDIR=Peek($BFE101)
For T=0 To 2
Led Off
If _TANK_SPECIAL(T)<=0
_INTANK=-1
For A=0 To 2
If _FLAG_MODE(A)=T
_INTANK=A
A=5
End If
Next
_LEFT=False
_RIGHT=False
_ACCEL=False
_BRAKE=False
_GUNLEFT=False
_GUNRIGHT=False
_GUNFIRE=0
If _CONTROL(T,0)=0 or _DEMO
' Decide what to chase
If _INTANK=-1
MDIST=999999
A=T
For NAN=0 To 2
TEST=True
If _FLAG_MODE(A)<=-1
If _FLAG_X(A)=_BASE_X(T)*16
If _FLAG_Y(A)=_BASE_Y(T)*16
TEST=False
End If
End If
End If
If _FLAG_MODE(A)=T
TEST=False
End If
If TEST=True
If _FLAG_MODE(A)<=-1
FX=_FLAG_X(A)*64
FY=_FLAG_Y(A)*64
Else
FX=_TANK_X(_FLAG_MODE(A))
FY=_TANK_Y(_FLAG_MODE(A))
End If
DIST=Int(Sqr(((_TANK_X(T)-FX)^2)+((_TANK_Y(T)-FY)^2))/6400)*6400
If DIST<MDIST
MDIST=DIST
NX=FX
NY=FY
End If
End If
Add A,1,0 To 2
Next
Else
NX=_BASE_X(T)*64*16
NY=_BASE_Y(T)*64*16
End If
' Work out which direction to face
DX=_TANK_X(T)-NX
DY=_TANK_Y(T)-NY
If DX=0
If DY>0
D=14
Else
D=-14
End If
Else
A#=DY
A#=A#/DX
A#=Atan(A#)
D=((A#*56)/360)
If DX<0
Add D,28
End If
End If
Add D,-14
If D<0
Add D,56
End If
If D>55
Add D,-56
End If
' Go around objects if necessary
NX=(_TANK_X(T)+(_XSPEED(D)*50)+512)/1024
NY=(_TANK_Y(T)+(_YSPEED(D)*50)+512)/1024
NX=Max(Min(NX,39),0)
NY=Max(Min(NY,31),0)
M=_MAP(NX,NY)
If(M=>248 and M<=263) or(M=>270 and M<=276)
NX=(_TANK_X(T)+(_XSPEED(_PD(T))*50)+512)/1024
NY=(_TANK_Y(T)+(_YSPEED(_PD(T))*50)+512)/1024
NX=Max(Min(NX,39),0)
NY=Max(Min(NY,31),0)
M=_MAP(NX,NY)
ND=0
While(M=>248 and M<=263) or(M=>270 and M<=276)
Add D,DDD
If D<0
Add D,56
End If
If D>55
Add D,-56
End If
NX=(_TANK_X(T)+(_XSPEED(D)*50)+512)/1024
NY=(_TANK_Y(T)+(_YSPEED(D)*50)+512)/1024
NX=Max(Min(NX,39),0)
NY=Max(Min(NY,31),0)
M=_MAP(NX,NY)
Inc ND
If ND>3
M=0
End If
Wend
If ND>0
_PD(T)=D
Else
D=_PD(T)
End If
Else
_PD(T)=D
End If
ND=0
While(M=>248 and M<=263) or(M=>270 and M<=276)
Add D,DDD
If D<0
Add D,56
End If
If D>55
Add D,-56
End If
NX=(_TANK_X(T)+(_XSPEED(D)*50)+512)/1024
NY=(_TANK_Y(T)+(_YSPEED(D)*50)+512)/1024
NX=Max(Min(NX,39),0)
NY=Max(Min(NY,31),0)
M=_MAP(NX,NY)
Inc ND
If ND>3
M=0
End If
Wend
' Actually point the tank in the correct direction
AD=_TANK_DIRECTION(T)-D
If Abs(AD)>28
AD=-AD
End If
If AD>0
_LEFT=True
End If
If AD<0
_RIGHT=True
End If
_ACCEL=True
End If
If _CONTROL(T,1)=0 or _DEMO
If T=0
A=1
B=2
End If
If T=1
A=0
B=2
End If
If T=2
A=0
B=1
End If
DISTA=Sqr(((_TANK_X(T)-_TANK_X(A))^2)+((_TANK_Y(T)-_TANK_Y(A))^2))
DISTB=Sqr(((_TANK_X(T)-_TANK_X(B))^2)+((_TANK_Y(T)-_TANK_Y(B))^2))
If _TANK_SPECIAL(A)>0
DISTA=999999
End If
If _TANK_SPECIAL(B)>0
DISTB=999999
End If
If DISTA<DISTB
FRAMES=DISTA/448
NX=_TANK_X(A)+(_XS(A)*FRAMES)
NY=_TANK_Y(A)+(_YS(A)*FRAMES)
Else
FRAMES=DISTB/448
NX=_TANK_X(B)+(_XS(B)*FRAMES)
NY=_TANK_Y(B)+(_YS(B)*FRAMES)
End If
DX=_TANK_X(T)-NX
DY=_TANK_Y(T)-NY
If DX=0
If DY>0
D=14
Else
D=-14
End If
Else
A#=DY
A#=A#/DX
A#=Atan(A#)
D=((A#*56)/360)
If DX<0
Add D,28
End If
End If
Add D,-14
If D<0
Add D,56
End If
If D>55
Add D,-56
End If
AD=_GUN_DIRECTION(T)-D
If Abs(AD)>28
AD=-AD
End If
If AD>0
_GUNLEFT=True
End If
If AD<0
_GUNRIGHT=True
End If
If Min(DISTA,DISTB)<=16384
If _GUN_DIRECTION(T)=D
If Rnd(1)=0
_GUNFIRE=1
Else
If Rnd(20)=0
_GUNFIRE=2
End If
End If
End If
End If
End If
If _DEMO=False
If _CONTROL(T,0)=1
If Jleft(1)
_LEFT=True
End If
If Jright(1)
_RIGHT=True
End If
If Jup(1)
_ACCEL=True
End If
If Jdown(1)
_BRAKE=True
End If
End If
If _CONTROL(T,1)=1
If Jleft(1)
_GUNLEFT=True
End If
If Jright(1)
_GUNRIGHT=True
End If
If Jup(1)
_GUNFIRE=1
End If
If Jdown(1)
_GUNFIRE=2
End If
End If
If _CONTROL(T,0)=2
If Jleft(0)
_LEFT=True
End If
If Jright(0)
_RIGHT=True
End If
If Jup(0)
_ACCEL=True
End If
If Jdown(0)
_BRAKE=True
End If
End If
If _CONTROL(T,1)=2
If Jleft(0)
_GUNLEFT=True
End If
If Jright(0)
_GUNRIGHT=True
End If
If Jup(0)
_GUNFIRE=1
End If
If Jdown(0)
_GUNFIRE=2
End If
End If
If _CONTROL(T,0)=3
If Btst(2,_DDIR)=0
_LEFT=True
End If
If Btst(3,_DDIR)=0
_RIGHT=True
End If
If Btst(0,_DDIR)=0
_ACCEL=True
End If
If Btst(1,_DDIR)=0
_BRAKE=True
End If
End If
If _CONTROL(T,1)=3
If Btst(2,_DDIR)=0
_GUNLEFT=True
End If
If Btst(3,_DDIR)=0
_GUNRIGHT=True
End If
If Btst(0,_DDIR)=0
_GUNFIRE=1
End If
If Btst(1,_DDIR)=0
_GUNFIRE=2
End If
End If
If _CONTROL(T,0)=4
If Btst(6,_DDIR)=0
_LEFT=True
End If
If Btst(7,_DDIR)=0
_RIGHT=True
End If
If Btst(4,_DDIR)=0
_ACCEL=True
End If
If Btst(5,_DDIR)=0
_BRAKE=True
End If
End If
If _CONTROL(T,1)=4
If Btst(6,_DDIR)=0
_GUNLEFT=True
End If
If Btst(7,_DDIR)=0
_GUNRIGHT=True
End If
If Btst(4,_DDIR)=0
_GUNFIRE=1
End If
If Btst(5,_DDIR)=0
_GUNFIRE=2
End If
End If
If _CONTROL(T,0)=5
K=Key Shift
If Btst(4,K)
_LEFT=True
End If
If Btst(6,K)
_RIGHT=True
End If
If Key State(33)
_ACCEL=True
End If
If Key State(49)
_BRAKE=True
End If
End If
If _CONTROL(T,1)=5
K=Key Shift
If Btst(4,K)
_GUNLEFT=True
End If
If Btst(6,K)
_GUNRIGHT=True
End If
If Key State(33)
_GUNFIRE=1
End If
If Key State(49)
_GUNFIRE=2
End If
End If
If _CONTROL(T,0)=6
If Key State(11)
_LEFT=True
End If
If Key State(12)
_RIGHT=True
End If
If Key State(13)
_ACCEL=True
End If
If Key State(27)
_BRAKE=True
End If
End If
If _CONTROL(T,1)=6
If Key State(11)
_GUNLEFT=True
End If
If Key State(12)
_GUNRIGHT=True
End If
If Key State(13)
_GUNFIRE=1
End If
If Key State(27)
_GUNFIRE=2
End If
End If
End If
If _LEFT
Add _TANK_DIRECTION(T),-1,0 To 55
End If
If _RIGHT
Add _TANK_DIRECTION(T),1,0 To 55
End If
NX=(_TANK_X(T)+512)/1024
NY=(_TANK_Y(T)+512)/1024
NX=Max(Min(NX,39),0)
NY=Max(Min(NY,31),0)
M=_MAP(NX,NY)
If(M=>237 and M<=247) or(M=>290 and M<=293)
MV=16
Else
MV=12
End If
If _INTANK>-1
MV=(MV*2)/3
End If
If _TANK_VELOCITY(T)>MV
_TANK_VELOCITY(T)=MV
End If
If _TANK_VELOCITY(T)<-MV
_TANK_VELOCITY(T)=-MV
End If
If _ACCEL and _TANK_VELOCITY(T)<MV
Inc _TANK_VELOCITY(T)
End If
If _BRAKE and _TANK_VELOCITY(T)>-MV
Dec _TANK_VELOCITY(T)
End If
TTX=_TANK_X(T)
TTY=_TANK_Y(T)
HIT=-1
For Z=0 To 2
If Z<>T
If Bob Col(T*2,Z*2 To Z*2)
HIT=Z
Z=5
End If
End If
Next
If HIT<>-1
If _PH(T)=0
_TANK_XS(HIT)=_XSPEED(_TANK_DIRECTION(T))*_TANK_VELOCITY(T)
_TANK_YS(HIT)=_YSPEED(_TANK_DIRECTION(T))*_TANK_VELOCITY(T)
_TANK_VELOCITY(T)=0
If _DEMO=False
Sam Play 8,6
End If
Dec _TANK_SHIELD(T)
If _TANK_SHIELD(T)<=0
If _DEMO=False
Sam Play 8,5
End If
NX=_TANK_X(T)/4
NY=_TANK_Y(T)/4
For TA=1 To 10
_SPECIAL_X(_CURRSPECIAL)=NX+Rnd(512)-256
_SPECIAL_Y(_CURRSPECIAL)=NY+Rnd(512)-256
_SPECIAL_F(_CURRSPECIAL)=280
Add _CURRSPECIAL,1,0 To 39
Next
_OX(T)=_TANK_X(T)/64
_OY(T)=_TANK_Y(T)/64
_TANK_VELOCITY(T)=0
_TANK_SHIELD(T)=35
_TANK_FUEL(T)=50000
_TANK_SPECIAL(T)=100
_GUN_AMMO(T,0)=99
_GUN_AMMO(T,1)=5
If _INTANK>-1
_FLAG_MODE(_INTANK)=-5
_FLAG_X(_INTANK)=_TANK_X(T)/64
_FLAG_Y(_INTANK)=_TANK_Y(T)/64
End If
_TANK_X(T)=_BASE_X(T)*16*64
_TANK_Y(T)=_BASE_Y(T)*16*64
End If
_UPDATESCORE[True,True,True,True,T]
_PH(T)=1
End If
Else
_PH(T)=0
End If
PX=_TANK_X(T)
PY=_TANK_Y(T)
OX=(PX+512)/1024
OY=(PY+512)/1024
OX=Max(Min(OX,39),0)
OY=Max(Min(OY,31),0)
_TANK_XS(T)=Min(Max(-512,_TANK_XS(T)),512)
_TANK_YS(T)=Min(Max(-512,_TANK_YS(T)),512)
Add _TANK_X(T),_XSPEED(_TANK_DIRECTION(T))*_TANK_VELOCITY(T)
Add _TANK_Y(T),_YSPEED(_TANK_DIRECTION(T))*_TANK_VELOCITY(T)
Add _TANK_X(T),_TANK_XS(T)
Add _TANK_Y(T),_TANK_YS(T)
Add _TANK_XS(T),Min(16,Max(-16,-_TANK_XS(T)))
Add _TANK_YS(T),Min(16,Max(-16,-_TANK_YS(T)))
If _DEMO=False
Sam Play 2^T,1,8000+(Abs(_TANK_VELOCITY(T))*600)
End If
NX=(_TANK_X(T)+512)/1024
NY=(_TANK_Y(T)+512)/1024
NX=Max(Min(NX,39),0)
NY=Max(Min(NY,31),0)
M=_MAP(NX,NY)
TR=0
If M=T+264
A=False
B=False
C=False
D=False
For A=0 To 2
If _FLAG_MODE(A)=T
_FLAG_MODE(A)=-5
_FLAG_X(A)=_BASE_X(T)*16
_FLAG_Y(A)=_BASE_Y(T)*16
C=True
End If
Next
_ATBASE=0
For A=0 To 2
If _FLAG_MODE(A)<=-1 and _FLAG_X(A)=_BASE_X(T)*16 and _FLAG_Y(A)=_BASE_Y(T)*16
Inc _ATBASE
End If
Next
If _ATBASE=>2
_WON=T+1
End If
If _TANK_SHIELD(T)<35
Inc _TANK_SHIELD(T)
A=True
End If
If _TANK_FUEL(T)<49000
Add _TANK_FUEL(T),1000
B=True
End If
If _GUN_AMMO(T,0)<99
Inc _GUN_AMMO(T,0)
D=True
End If
If _GUN_AMMO(T,1)<5
Inc _GUN_AMMO(T,1)
D=True
End If
_UPDATESCORE[A,B,C,D,T]
End If
If(M=>248 and M<=263) or(M=>270 and M<=276)
M=_MAP(OX,NY)
TR=1
If(M=>248 and M<=263) or(M=>270 and M<=276)
M=_MAP(NX,OY)
TR=2
If(M=>248 and M<=263) or(M=>270 and M<=276)
TR=3
End If
End If
End If
If TR=1
_TANK_X(T)=PX
End If
If TR=2
_TANK_Y(T)=PY
End If
If TR=3
_TANK_X(T)=PX
_TANK_Y(T)=PY
End If
D=_TANK_DIRECTION(T)
Add D,-14
If D<0
Add D,56
End If
Extension_12_0394(_TANK_X(T)/64)+8+(_XSPEED(D)/3),(_TANK_Y(T)/64)+8+(_YSPEED(D)/3),8
Add D,28
If D>55
Add D,-56
End If
Extension_12_0394(_TANK_X(T)/64)+8+(_XSPEED(D)/3),(_TANK_Y(T)/64)+8+(_YSPEED(D)/3),8
O=_TANK_FUEL(T)/1428
Add _TANK_FUEL(T),-(Abs((_TANK_VELOCITY(T))+4)*2)
If _TANK_FUEL(T)>0
If O<>_TANK_FUEL(T)/1428
_UPDATESCORE[False,True,False,False,T]
End If
Else
If _DEMO=False
Sam Play 8,5
End If
NX=_TANK_X(T)/4
NY=_TANK_Y(T)/4
For TA=1 To 10
_SPECIAL_X(_CURRSPECIAL)=NX+Rnd(512)-256
_SPECIAL_Y(_CURRSPECIAL)=NY+Rnd(512)-256
_SPECIAL_F(_CURRSPECIAL)=280
Add _CURRSPECIAL,1,0 To 39
Next
_OX(T)=_TANK_X(T)/64
_OY(T)=_TANK_Y(T)/64
_TANK_VELOCITY(T)=0
_TANK_SHIELD(T)=35
_TANK_FUEL(T)=50000
_TANK_SPECIAL(T)=100
_GUN_AMMO(T,0)=99
_GUN_AMMO(T,1)=5
_INTANK=-1
For A=0 To 2
If _FLAG_MODE(A)=T
_INTANK=A
A=5
End If
Next
If _INTANK>-1
_FLAG_MODE(_INTANK)=-5
_FLAG_X(_INTANK)=_TANK_X(T)/64
_FLAG_Y(_INTANK)=_TANK_Y(T)/64
End If
_TANK_X(T)=_BASE_X(T)*16*64
_TANK_Y(T)=_BASE_Y(T)*16*64
_UPDATESCORE[True,True,True,True,T]
End If
_TANK_X(T)=Min(Max(0,_TANK_X(T)),39936)
_TANK_Y(T)=Min(Max(0,_TANK_Y(T)),31744)
If _GUNLEFT
Add _GUN_DIRECTION(T),-1,0 To 55
End If
If _GUNRIGHT
Add _GUN_DIRECTION(T),1,0 To 55
End If
If _GUNFIRE=1
If _GUN_AMMO(T,0)>0
Inc _FIRED(T)
If _DEMO=False
Sam Play 8,4
End If
_SPECIAL_X(_CURRSPECIAL)=_TANK_X(T)/4
_SPECIAL_Y(_CURRSPECIAL)=_TANK_Y(T)/4
_SPECIAL_XS(_CURRSPECIAL)=_XSPEED(_GUN_DIRECTION(T))*8
_SPECIAL_YS(_CURRSPECIAL)=_YSPEED(_GUN_DIRECTION(T))*8
_SPECIAL_F(_CURRSPECIAL)=225+T
Add _CURRSPECIAL,1,0 To 39
Dec _GUN_AMMO(T,0)
_UPDATESCORE[False,False,False,True,T]
End If
End If
If _GUNFIRE=2
If _PF(T)=0
If _GUN_AMMO(T,1)>0
Inc _FIRED(T)
If _DEMO=False
Sam Play 8,3
End If
_SPECIAL_X(_CURRSPECIAL)=_TANK_X(T)/4
_SPECIAL_Y(_CURRSPECIAL)=_TANK_Y(T)/4
_SPECIAL_XS(_CURRSPECIAL)=_XSPEED(_GUN_DIRECTION(T))*6
_SPECIAL_YS(_CURRSPECIAL)=_YSPEED(_GUN_DIRECTION(T))*6
_SPECIAL_F(_CURRSPECIAL)=229+T
Add _CURRSPECIAL,1,0 To 39
_PF(T)=1
Dec _GUN_AMMO(T,1)
_UPDATESCORE[False,False,False,True,T]
End If
End If
Else
_PF(T)=0
End If
_XS(T)=_TANK_X(T)-TTX
_YS(T)=_TANK_Y(T)-TTY
Bob T*2,_TANK_X(T)/64,_TANK_Y(T)/64,_TANK_DIRECTION(T)+(T*56)+1
Bob(T*2)+1,_TANK_X(T)/64,_TANK_Y(T)/64,_GUN_DIRECTION(T)+169
Else
Dec _TANK_SPECIAL(T)
Bob Off T*2
Bob Off(T*2)+1
End If
Next
For Z=0 To 39
_SF=_SPECIAL_F(Z)
If _SF<>-100
If _SF=>225 and _SF<=231
If _SPECIAL_X(Z)>-128 and _SPECIAL_Y(Z)>-128 and _SPECIAL_X(Z)<10096 and _SPECIAL_Y(Z)<8048
M=_MAP((_SPECIAL_X(Z)+128)/256,(_SPECIAL_Y(Z)+128)/256)
PL=_SF-225
If PL=>4
Add PL,-4
End If
HIT=0
For A=0 To 2
If A<>PL
If Bob Col(Z+6,A*2 To A*2)
HIT=A+1
A=5
End If
End If
Next
If HIT
Inc _HIT(PL)
End If
If(M=>270 and M<=276) or HIT
If HIT
HT=HIT-1
Dec _TANK_SHIELD(HT)
_UPDATESCORE[True,False,False,False,HT]
If _TANK_SHIELD(HT)<=0
If _DEMO=False
Sam Play 8,5
End If
NX=_TANK_X(HT)/4
NY=_TANK_Y(HT)/4
For TA=1 To 10
_SPECIAL_X(_CURRSPECIAL)=NX+Rnd(512)-256
_SPECIAL_Y(_CURRSPECIAL)=NY+Rnd(512)-256
_SPECIAL_F(_CURRSPECIAL)=280
Add _CURRSPECIAL,1,0 To 39
Next
_OX(HT)=_TANK_X(HT)/64
_OY(HT)=_TANK_Y(HT)/64
_TANK_VELOCITY(HT)=0
_TANK_SHIELD(HT)=35
_TANK_FUEL(HT)=50000
_TANK_SPECIAL(HT)=100
_GUN_AMMO(HT,0)=99
_GUN_AMMO(HT,1)=5
_INTANK=-1
For A=0 To 2
If _FLAG_MODE(A)=HT
_INTANK=A
A=5
End If
Next
If _INTANK>-1
_FLAG_MODE(_INTANK)=-5
_FLAG_X(_INTANK)=_TANK_X(HT)/64
_FLAG_Y(_INTANK)=_TANK_Y(HT)/64
End If
_TANK_X(HT)=_BASE_X(HT)*16*64
_TANK_Y(HT)=_BASE_Y(HT)*16*64
_UPDATESCORE[True,True,True,True,HT]
End If
If _SF=>225 and _SF<=227
Add _TANK_XS(HT),_SPECIAL_XS(Z)/2
Add _TANK_YS(HT),_SPECIAL_YS(Z)/2
Else
Add _TANK_XS(HT),_SPECIAL_XS(Z)*2
Add _TANK_YS(HT),_SPECIAL_YS(Z)*2
End If
End If
If _SF=>225 and _SF<=227
_SPECIAL_F(Z)=280
If _DEMO=False
Sam Play 8,2
End If
Else
If _DEMO=False
Sam Play 8,5
End If
CZ=Z
NX=_SPECIAL_X(Z)
NY=_SPECIAL_Y(Z)
For A=1 To 10
_SPECIAL_X(CZ)=NX+Rnd(512)-256
_SPECIAL_Y(CZ)=NY+Rnd(512)-256
_SPECIAL_F(CZ)=280
CZ=_CURRSPECIAL
Add _CURRSPECIAL,1,0 To 39
Next
End If
Else
Add _SPECIAL_X(Z),_SPECIAL_XS(Z)
Add _SPECIAL_Y(Z),_SPECIAL_YS(Z)
End If
Else
_SPECIAL_F(Z)=300
End If
Else
Inc _SPECIAL_F(Z)
If _SPECIAL_F(Z)=282
If _SPECIAL_X(Z)>-128 and _SPECIAL_Y(Z)>-128 and _SPECIAL_X(Z)<10096 and _SPECIAL_Y(Z)<8048
TX=(_SPECIAL_X(Z)+128)/256
TY=(_SPECIAL_Y(Z)+128)/256
M=_MAP(TX,TY)
If M=>270 and M<=272
_MAP(TX,TY)=M+7
Paste Bob TX*16,TY*16,M+7
End If
End If
End If
HIT=-1
For A=0 To 2
If Bob Col(Z+6,A*2 To A*2)
HIT=A
A=5
End If
Next
If HIT=>0
Dec _TANK_SHIELD(HIT)
_UPDATESCORE[True,False,False,False,HIT]
If _TANK_SHIELD(HIT)<=0
If _DEMO=False
Sam Play 8,5
End If
CZ=Z
NX=_TANK_X(HIT)/4
NY=_TANK_Y(HIT)/4
For TA=1 To 10
_SPECIAL_X(CZ)=NX+Rnd(512)-256
_SPECIAL_Y(CZ)=NY+Rnd(512)-256
_SPECIAL_F(CZ)=280
CZ=_CURRSPECIAL
Add _CURRSPECIAL,1,0 To 39
Next
_OX(HIT)=_TANK_X(HIT)/64
_OY(HIT)=_TANK_Y(HIT)/64
_TANK_VELOCITY(HIT)=0
_TANK_SHIELD(HIT)=35
_TANK_FUEL(HIT)=50000
_TANK_SPECIAL(HIT)=100
_GUN_AMMO(HIT,0)=99
_GUN_AMMO(HIT,1)=5
_INTANK=-1
For A=0 To 2
If _FLAG_MODE(A)=HIT
_INTANK=A
A=5
End If
Next
If _INTANK>-1
_FLAG_MODE(_INTANK)=-5
_FLAG_X(_INTANK)=_TANK_X(HIT)/64
_FLAG_Y(_INTANK)=_TANK_Y(HIT)/64
End If
_TANK_X(HIT)=_BASE_X(HIT)*16*64
_TANK_Y(HIT)=_BASE_Y(HIT)*16*64
_UPDATESCORE[True,True,True,True,HIT]
End If
End If
End If
Bob Z+6,_SPECIAL_X(Z)/16,_SPECIAL_Y(Z)/16,_SPECIAL_F(Z)
If _SPECIAL_F(Z)=>288
_SPECIAL_F(Z)=-100
End If
Else
Bob Off Z+6
End If
Next
For Z=0 To 2
If _FLAG_MODE(Z)<0
If _FLAG_MODE(Z)=-1
For A=0 To 2
If Bob Col(Z+46,A*2 To A*2)
_PICKUP=True
For B=0 To 2
If B<>Z
If _FLAG_MODE(B)=A
_PICKUP=False
B=5
End If
End If
Next
If _FLAG_X(Z)=_BASE_X(A)*16
If _FLAG_Y(Z)=_BASE_Y(A)*16
_PICKUP=False
End If
End If
If _TANK_SPECIAL(A)>0
_PICKUP=False
End If
If _PICKUP
_FLAG_MODE(Z)=A
End If
_UPDATESCORE[False,False,True,False,A]
_UPDATESCORE[False,False,True,False,Z]
A=5
End If
Next
Else
If Bob Col(Z+46,0 To 5)=False
Inc _FLAG_MODE(Z)
End If
End If
Bob Z+46,_FLAG_X(Z),_FLAG_Y(Z),267+Z
Else
Bob Off Z+46
End If
Next
Bob Draw
Screen 0
For Z=0 To 2
If _TANK_SPECIAL(Z)=>75
NX=_OX(Z)
NY=_OY(Z)
_TANK_XS(Z)=0
_TANK_YS(Z)=0
Else
TMP=75-_TANK_SPECIAL(Z)
DX=(_TANK_X(Z)/64)-_OX(Z)
DY=(_TANK_Y(Z)/64)-_OY(Z)
NX=((DX*TMP)/76)+_OX(Z)
NY=((DY*TMP)/76)+_OY(Z)
End If
TX=Min(Max(NX-45,0),534)
TY=Min(Max(NY-92,0),312)
Screen Copy 2,TX,TY,TX+112,TY+200 To 0,Z*107,0
Next
Ink 0,0,0
Draw 106,0 To 106,199
Draw 213,0 To 213,199
If _DEMO
Paste Bob 0,160,289
Else
If Key State(69)
_WON=-1
End If
If Key State(95)
Unpack 16 To 7
Screen To Back 7
Sam Play 3
For Z=1 To 216 Step 8
Screen Display 0,128,42-Z,320,200
Screen Display 1,128,244+(Z/2),320,64
Wait Vbl
Next
Screen Hide 0
Screen Hide 1
Repeat
Led Off
Wait Vbl
Until Key State(95)=0
Repeat
Led Off
Wait Vbl
Until Key State(95)
Repeat
Led Off
Wait Vbl
Until Key State(95)=0
Screen Show 0
Screen Show 1
For Z=216 To 0 Step -8
Screen Display 0,128,42-Z,320,200
Screen Display 1,128,244+(Z/2),320,64
Wait Vbl
Next
Sam Play 6
Screen Close 7
Wait 30
End If
End If
Screen Swap
Wait Vbl
Led Off
If _DEMO
If Timer>2000
_WON=-1
End If
If Fire(0) or Fire(1)
_WON=-2
End If
End If
Until _WON<>0
Screen 0
Fade 1
Rainbow Del 0
Timer=0
Screen Close 2
Wait Max(1,15-Timer)
Screen 1
Fade 1
Timer=0
Screen Close 0
Wait Max(1,15-Timer)
Screen Close 1
If _DEMO=False
Volume %1111,63
End If
End Proc[_WON]
Procedure _UPDATESCORE[SHIELD,FUEL,FLAGS,AMMO,P]
Screen 1
AD=P*107
If SHIELD
Ink 0,0,0
Bar 17+AD,52 To 53+AD,56
If _TANK_SHIELD(P)=>0
Ink 8,0,0
Bar 17+AD,52 To AD+18+_TANK_SHIELD(P),56
End If
End If
If FUEL
Ink 0,0,0
Bar 11+AD,22 To 14+AD,58
If _TANK_FUEL(P)=>0
Ink 8,0,0
Bar 11+AD,57-(_TANK_FUEL(P)/1428) To 14+AD,58
End If
End If
If FLAGS
_ATBASE=1
For A=0 To 2
If _FLAG_MODE(A)<=-1 and _FLAG_X(A)=_BASE_X(P)*16 and _FLAG_Y(A)=_BASE_Y(P)*16
_ATBASE=0
A=5
End If
Next
_INTANK=1
For A=0 To 2
If _FLAG_MODE(A)=P
_INTANK=0
A=5
End If
Next
Ink 0,0,0
Bar 22+AD,29 To 35+AD,42
Bar 40+AD,29 To 53+AD,42
Paste Bob 22+AD,29,294+_INTANK
Paste Bob 40+AD,29,294+_ATBASE
End If
If AMMO
Ink 0,0,0
Bar 22+AD,22 To 36+AD,29
Bar 39+AD,22 To 53+AD,29
Ink 10,0,0
N=_GUN_AMMO(P,1)
N$=Str$(N)
N$=Right$(N$,Len(N$)-1)
If Len(N$)<2
N$="0"+N$
End If
Text 23+AD,27,N$
N=_GUN_AMMO(P,0)
N$=Str$(N)
N$=Right$(N$,Len(N$)-1)
If Len(N$)<2
N$="0"+N$
End If
Text 40+AD,27,N$
End If
Screen 2
End Proc
Procedure _TEST[A,B,C,D]
CHANGE=False
T=0
If A
Inc T
End If
If B
Inc T
End If
If C
Inc T
End If
If D
Inc T
End If
If T<2
CHANGE=True
Else
If T=2
If A and C
CHANGE=True
End If
If B and D
CHANGE=True
End If
End If
End If
End Proc[CHANGE]
Procedure _NUMBER[A,B,C,D,E,F,G,H]
If E
BN=256
End If
If G
BN=257
End If
If A
BN=258
End If
If C
BN=259
End If
If F
BN=252
End If
If H
BN=253
End If
If B
BN=254
End If
If D
BN=255
End If
If D and E and F
BN=260
End If
If F and G and H
BN=261
End If
If A and B and H
BN=262
End If
If B and C and D
BN=263
End If
WATERDAT:
Data %1001,254
Data %110,252
Data %11,255
Data %1100,253
Data %10,256
Data %100,257
Data %1000,258
Data %1,259
Data %111,260
Data %1110,261
Data %1101,262
Data %1011,263
Data %1111,248+Rnd(3)
End Proc[BN]
Procedure _WATER[BN]
If BN=>248 and BN<=251
_WAT=True
Else
_WAT=False
End If
End Proc[_WAT]
Procedure _TITLESCREEN
Unpack 12 To 7
Screen Hide 7
For Z=24 To 31
Colour Z,$FFF
Next
Screen Open 0,320,256,32,Lowres
Screen Hide 0
Flash Off
Curs Off
For Z=0 To 31
Colour Z,$0
Next
Screen Copy 7 To 0
Screen Show 0
Fade 1 To 7
Screen Close 7
Wait 15
OF=0
_DONE=False
_QUIT=False
Timer=0
Repeat
If Rnd(1)=0
If OF<7
Shift Down 2,1,31,1
Wait Vbl
Shift Off
Inc OF
End If
Else
If OF>1
Shift Up 1,1,31,1
Wait Vbl
Shift Off
Dec OF
End If
End If
If Timer>500
Fade 1
Wait 15
Screen Close 0
_MAINGAME[True]
If Param=-2
_DONE=True
Screen Open 0,320,256,2,Lowres
Screen Hide 0
Else
Unpack 12 To 7
Screen Hide 7
For Z=24 To 31
Colour Z,$FFF
Next
Screen Open 0,320,256,32,Lowres
Screen Hide 0
Flash Off
Curs Off
For Z=0 To 31
Colour Z,$0
Next
Screen Copy 7 To 0
Screen Show 0
Fade 1 To 7
Screen Close 7
Wait 15
OF=0
Timer=0
End If
End If
If Fire(0) or Fire(1)
_DONE=True
End If
If Key State(69)
_QUIT=True
_DONE=True
End If
Led Off
Until _DONE
Fade 1
Wait 15
Screen Close 0
End Proc[_QUIT]
Procedure _RESULTS[WINNER]
Screen Open 0,320,256,32,Lowres
Screen Hide 0
Flash Off
Curs Off
For Z=0 To 31
Colour Z,$0
Next
_CREATEBACKGROUND
Restore WINNERDAT
For Z=1 To WINNER
Read _COL
Next
For Z=24 To 31
_GETCOL[_COL,Z-23,8]
Colour Z,Param
Next
Screen Copy 7 To 0
Unpack 14 To 6
Screen Hide 6
For Z=8 To 23
Screen 6
_COL=Colour(Z)
Screen 7
Colour Z,_COL
Next
Screen 0
Get Bob 6,297,0,0 To 309,68
Paste Bob 0,0,297
Del Bob 297
AY=((WINNER-1)*49)
Get Bob 6,297,10,85+AY To 185,135+AY
Paste Bob 73,103,297
Del Bob 297
Screen Close 6
Set Font _BOSTON18
Ink 23,0,0
Gr Writing 0
N$="Statistics"
Text 160-(Text Length(N$)/2),200,N$
Set Font _MINI
Ink 20,0,0
N$=" Fired Hit Hit ratio Skill rating"
Text 10,220,N$
Ink 15,0,0
For T=0 To 2
N$="Player"+Str$(T+1)
Text 10,(T*7)+230,N$
N$=Str$(_FIRED(T))+" "
Text 92-(Text Length(N$)/2),(T*7)+230,N$
N$=Str$(_HIT(T))+" "
Text 139-(Text Length(N$)/2),(T*7)+230,N$
If _FIRED(T)>0
N$=Str$((_HIT(T)*100)/_FIRED(T))+"%"
Else
N$=" 0%"
End If
Text 196-(Text Length(N$)/2),(T*7)+230,N$
N$=Str$((_SKILL(T)*100)/_TOTALT)+"%"
Text 270-(Text Length(N$)/2),(T*7)+230,N$
Next
Gr Writing 1
Set Rainbow 0,15,21,"","",""
Restore WINNERDAT
For Z=0 To 2
Read _COL
V=3
For Y=Z*7 To(Z*7)+6
Inc V
_GETCOL[_COL,V,10]
Rain(0,Y)=Param
Next
Next
Rainbow 0,0,267,22
Screen Show 0
Fade 1 To 7
Screen Close 7
Repeat
Led Off
Wait Vbl
Until Fire(0) or Fire(1)
Fade 1
Wait 15
Screen Close 0
Rainbow Del 0
WINNERDAT:
Data $F33,$3F3,$36F
End Proc
Procedure _CREATEBACKGROUND
Unpack 13 To 7
Screen Hide 7
Restore BACKGROUND
Read N
R=Rnd(N-1)+1
For Z=1 To R
Read _COL
Next
For Z=1 To 7
_GETCOL[_COL,Z,7]
Colour Z,Param
Next
BACKGROUND:
Data 6
Data $A52,$C,$900,$609,$359,$770
End Proc
Procedure _GETCOL[TC,N,D]
R=TC/256
G=(TC-(R*256))/16
B=TC-(R*256)-(G*16)
NR=(R*N)/D
NG=(G*N)/D
NB=(B*N)/D
FC=(NR*256)+(NG*16)+NB
End Proc[FC]
Procedure _CONFIGSCREEN
_CREATEBACKGROUND
Unpack 15 To 2
Screen Hide 2
Screen Open 1,320,256,32,Lowres
Screen Hide 1
Curs Off
Flash Off
Screen Copy 7 To 1
Get Palette 2
For Z=0 To 7
Screen 7
_COL=Colour(Z)
Screen 1
Colour Z,_COL
Next
Screen 1
Get Bob 2,297,0,0 To 319,255
Paste Bob 0,0,297
Del Bob 297
Screen Close 2
Screen Close 7
Screen Open 0,320,256,32,Lowres
Screen Hide 0
Flash Off
Curs Off
For Z=0 To 31
Colour Z,$0
Next
Screen Copy 1 To 0
Reserve Zone 8
N=0
For Y=113 To 147 Step 17
For X=26 To 169 Step 143
Inc N
Set Zone N,X,Y To X+140,Y+9
Next
Next
Set Zone 7,82,180 To 237,196
Set Zone 8,128,216 To 187,233
Set Font _MINI
_UPDATECONTROLS
Sprite Update Off
Screen Show 0
Fade 1 To 1
Timer=10
Repeat
Limit Mouse
Sprite 1,X Mouse,Y Mouse,296
If Jleft(1)
X Mouse=X Mouse-2
End If
If Jright(1)
X Mouse=X Mouse+2
End If
If Jup(1)
Y Mouse=Y Mouse-2
End If
If Jdown(1)
Y Mouse=Y Mouse+2
End If
If Fire(0) or Fire(1)
M=Mouse Zone
If M=>1 and M<=6 and Timer>10
Timer=0
T=(M-1)/2
P=M-(T*2)-1
Add _CONTROL(T,P),1,0 To 6
_UPDATECONTROLS
End If
If M=7
_INSTRUCTIONS
End If
Else
M=0
End If
Sprite Update
Wait Vbl
Led Off
Until M=8
Screen 0
Fade 1
Wait 15
Sprite Off 1
Sprite Update
Screen Close 0
Screen Close 1
End Proc
Procedure _INSTRUCTIONS
Sprite Off 1
Sprite Update
Wait Vbl
Screen Open 2,320,256,32,Lowres
Screen Hide 2
Curs Off
Flash Off
Cls 0
Colour 8,$FFF
Colour 9,$FF0
Colour 10,$F00
Colour 11,$AAA
Colour 12,$90F
Colour 13,$5A5
Restore _INSTRUCTIONSDAT
Read NUP
PAG=0
_PTY=0
Repeat
Y=5
Screen 0
Fade 1
Timer=0
_CREATEBACKGROUND
Screen 2
Screen Copy 7 To 2
For Z=1 To 7
Screen 7
_COL=Colour(Z)
Screen 2
Colour Z,_COL
Next
Screen Close 7
Screen 2
Gr Writing 0
Repeat
Read R$
If R$<>"PAGE" and R$<>"END"
_DISPLAYLINE[R$,Y]
Y=Param
End If
Until R$="PAGE" or R$="END"
Set Font _MINI
Ink 11,0,0
Inc P
N$="Page"+Str$(P)+" of"+Str$(NUP)
Text 310-Text Length(N$),250,N$
Gr Writing 1
Screen 0
Wait Max(1,15-Timer)
Screen Copy 2 To 0
Fade 1 To 2
Repeat
Wait Vbl
Led Off
Until Fire(0) or Fire(1)
Until R$="END"
Fade 1
Wait 15
Screen Close 2
Screen Copy 1 To 0
Screen 0
_UPDATECONTROLS
Fade 1 To 1
_INSTRUCTIONSDAT:
Data 5
Data "1How to play"
Data "2The aim of the game"
Data "3To have two flags in your base at one time."
Data "2How to do it"
Data "3You have a tank, driven and gunned independently, "
Data "3which can hold only one flag at once. To pick up a"
Data "3flag, you drive over it. You tank will drop any"
Data "3flags it may have when:"
Data "5 It explodes"
Data "5 It is on its base"
Data "2Bases"
Data "3Your base is a circle of your colour which will"
Data "3recharge your tank when it is parked on it. When"
Data "3you first start, you will be on top of your base."
Data "3Your base cannot be destroyed and starts with a"
Data "3flag of your colour in it. This can be stolen."
Data "2Tanks"
Data "3There are three tanks in the game, each of a"
Data "3different colour; red, green and blue. Each tank"
Data "PAGE"
Data "1How to play"
Data "4(continued...)"
Data "3"
Data "3has a certain amount of shield, fuel and ammo, all"
Data "3of which can be recharged at the appropriate base."
Data "3Ramming another tank looses you both a bit of"
Data "3shield. Furthermore, driving looses you fuel."
Data "3Surprisingly, getting shot will loose you health."
Data "3There are two types of weapon:"
Data "5 Machine gun - weak, but you get 99 shots"
Data "5 Rocket laucher - powerful, with only 5 shots"
Data "3If you run out of either fuel or shield, your tank"
Data "3will explode, releasing any flags it contains."
Data "2Status bar"
Data "3Whilst playing the game, along the bottom of the"
Data "3display is the status bar. For each particular"
Data "3tank, the following information is shown:"
Data "5 Fuel"
Data "5 Shield"
Data "5 How much ammo you have for the two weapons"
Data "5 Whether or not your tank has a flag in it"
Data "3 (represented by the white flag)"
Data "5 Whether or not your base has a flag in it"
Data "3 (represented by the flag of your tank's colour)"
Data "PAGE"
Data "1Controls"
Data "2In-game"
Data "6KEYS 1 KEYS 2 JOYSTICK DRIVER GUNNER"
Data "3 s \ up accelerate machine gun"
Data "3 z ] down brake rocket launcher"
Data "3l-alt - left turn left rotate left"
Data "3l-amiga = right turn right rotate right"
Data "2Other keys"
Data "3Help - pauses"
Data "3(Esc)ape - quits current game (in game only)"
Data "3(Esc)ape - quit program (title screen only)"
Data "3"
Data "3"
Data "2To contact the author"
Data "3 Post - 54 Knowles Avenue, Crowthorne,"
Data "3 Berkshire, RG45 6DU, England."
Data "3"
Data "3 E-Mail - J.R.Daniels@Warwick.ac.uk"
Data "3 WWW - http://www.warwick.ac.uk/~csuaw/"
Data "PAGE"
Data "1About the game"
Data "2Stuff used"
Data "5 AMOS Professional v2"
Data "5 6MB A1200/040 with 1.8Gb HD"
Data "5 Deluxe Paint IV AGA"
Data "5 Wierd Science's `Sounds Terrific' CDs"
Data "5 OctaMED Professional v5"
Data "5 Aiwa ACD-300 CD-ROM drive unit"
Data "2`Amusing' facts about the game"
Data "5 It took about two weeks to program, from"
Data "3 original concept to finished program."
Data "5 It consists of over 2300 lines of code."
Data "5 The levels are randomly generated - so there are"
Data "3 literally billions of different possibilities."
Data "5 The graphics take up a mere 144K of memory."
Data "5 The sound, however, is taking up 273K."
Data "5 The computer gunners are rather clever - they"
Data "3 even take into account the fact that you are"
Data "3 moving, and fire ahead appropriately."
Data "5 The computer drivers, however, are (to say the"
Data "3 least) not quite as smart."
Data "PAGE"
Data "1Credits"
Data "2Coding"
Data "4James Daniels"
Data "2Music"
Data "4Night Shade of CRS"
Data "2Graphics"
Data "4James Daniels"
Data "2Sound"
Data "4Sounds Terrific CD"
Data "4James Daniels"
Data "2Playtesters"
Data "4James Daniels"
Data "4Christopher Daniels"
Data "4Paul L'Allier"
Data "4Bernard L'Allier"
Data "4Jonathan Hughes"
Data "4Alex Smith"
Data "4Max Robinson"
Data "END"
End Proc
Procedure _DISPLAYLINE[TXT$,Y]
Led Off
T$=Left$(TXT$,1)
TXT$=Right$(TXT$,Len(TXT$)-1)
If T$="1"
If _PTY<>1
Set Font _BOSTON23
_PTY=1
End If
Ink 9,0,0
Text 160-(Text Length(TXT$)/2),Y+23,TXT$
Add Y,30
End If
If T$="2"
If _PTY<>2
_PTY=2
Set Font _BOSTON18
End If
Ink 10,0,0
Text 2,Y+19,TXT$
Add Y,24
End If
If T$="3"
If _PTY<>3
_PTY=3
Set Font _MINI
End If
Ink 8,0,0
Text 15,Y+6,TXT$
Add Y,7
End If
If T$="4"
If _PTY<>3
_PTY=3
Set Font _MINI
End If
Ink 8,0,0
Text 310-Text Length(TXT$),Y+6,TXT$
Add Y,7
End If
If T$="5"
If _PTY<>3
_PTY=3
Set Font _MINI
End If
Ink 8,0,0
Text 15,Y+6,TXT$
Ink 12,0,0
Bar 21,Y+2 To 24,Y+5
Add Y,7
End If
If T$="6"
If _PTY<>3
_PTY=3
Set Font _MINI
End If
Ink 13,0,0
Text 15,Y+6,TXT$
Add Y,7
End If
End Proc[Y]
Procedure _UPDATECONTROLS
Screen Copy 1,26,113,310,157 To 0,26,113
Screen 0
Gr Writing 0
Ink 31,0,0
For T=0 To 2
For P=0 To 1
Restore CONTROLDAT
For A=0 To _CONTROL(T,P)
Read N$
Next
Text 96+(143*P)-(Text Length(N$)/2),120+(T*17),N$
Next
Next
Gr Writing 1
CONTROLDAT:
Data "Computer","Left joystick","Right joystick","Left joystick (adapt.)","Right joystick (adapt.)","Keyboard 1","Keyboard 2"
End Proc
Procedure _CHECK[X,Y,ADX,ADY]
Add X,ADX
Add Y,ADY
M=0
If X=>0 and Y=>0 and X<=39 and Y<=31
M=_MAP(X,Y)
End If
End Proc[M]
Procedure _GETFONTS
Get Disc Fonts
_SUCCESS= Extension_10_0326(DISK$+"Fonts/JRDMini.font",6)
If _SUCCESS<=0
End
End If
_SUCCESS= Extension_10_0326(DISK$+"Fonts/Boston.font",18)
If _SUCCESS<=0
End
End If
_SUCCESS= Extension_10_0326(DISK$+"Fonts/Boston.font",23)
If _SUCCESS<=0
End
End If
_FINDFONTS
End Proc
Procedure _FINDFONTS
Get Rom Fonts
_GETFONT["JRDMini",6]
_MINI=Param
_GETFONT["Boston",18]
_BOSTON18=Param
_GETFONT["Boston",23]
_BOSTON23=Param
End Proc
Procedure _GETFONT[_NAME$,_SIZE]
_FIND$=Lower$((_NAME$+".font"+Str$(_SIZE)+"rom")-" ")
_FONT=0
Repeat
Inc _FONT
Until Lower$(Font$(_FONT)-" ")=_FIND$
End Proc[_FONT]
BASEDAT:
Data 0,0
Data 39,0
Data 19,31